package Modelo;


import java.util.*;




public class Unidad {

	//atributos
	
	private String placa;
	private String marca;
	private TipoUnidad tipounidad;
	private Socio socio;
	private ArrayList<Recibo> recibos;
	private String chofer;
	//estatus A - Activo / I - Inactivo si esta multado
	
	private char estatus;
	//Constructor sin parametros
	
	public Unidad(){
		super();
		recibos = new ArrayList<Recibo>();
		estatus = 'A';
	}
	
	//Constructor con parametros
	
	public Unidad(String placa, TipoUnidad tipounidad, ArrayList<Recibo> recibos, Socio socio, boolean estatus , String marca, String chofer)
	{
		this.placa = placa;
		this.tipounidad = tipounidad;
		this.recibos = recibos;
		this.socio = socio;
		this.marca = marca;
		this.chofer = chofer;
	}
	
	//getters y setters
	
	
	public void setPlaca(String placa){
		this.placa = placa;
	}
	
	public String getChofer() {
		return chofer;
	}

	public void setChofer(String chofer) {
		this.chofer = chofer;
	}

	public String getMarca() {
		return marca;
	}

	public void setMarca(String marca) {
		this.marca = marca;
	}

	public TipoUnidad getTipounidad() {
		return tipounidad;
	}

	public void setTipounidad(TipoUnidad tipounidad) {
		this.tipounidad = tipounidad;
	}

	public String getPlaca(){
		return placa;
	}
	
	
	public void setRecibos(ArrayList<Recibo> recibos){
		this.recibos = recibos;
	}
	
	public ArrayList<Recibo> getRecibos(){
		return recibos;
	}
	
	public void setSocio(Socio socio){
		this.socio = socio;
	}
	
	public Socio getSocio(){
		return socio;
	}
	
	//Metodos de ArrayList de recibos
		/**
		 * Metodo que permite agregar un recibo en el ArrayList.
		 * @param recibo informacion del recibo a agregar.
		 */
		public void agregarRecibo(Recibo recibo){
			this.recibos.add(recibo);
		}
		
		/**
		 * Retorna la cantidad de recibos que tiene el ArrayList
		 */
		public int contarRecibos() {
			return this.recibos.size();
		}
		
		/**
		 * Metodo que retorna la informacion de un recibo del ArrayList de acuerdo a la posicion indicada.
		 * @param i posicion del recibo en el ArrayList
		 * @return informacion del Recibo indicado.
		 */
		public Recibo obtenerRecibo(int i) {
			return this.recibos.get(i);
		}
		
		/**
		 * Metodo que permite buscar la informacion de un recibo en el ArrayList de acuerdo al codigo 
		 * @param codigo informacion del codigo del recibo a buscar en el ArrayList.
		 * @return la informacion del recibo en caso de encontrarlo o null en caso de no encontrar el recibo en el ArrayList
		 */
		public Recibo buscarRecibo(String codigo) {
			for (int i = 0; i < contarRecibos(); i++) {
				if (obtenerRecibo(i).getCodigo().equals(codigo)) {
					return obtenerRecibo(i);
				}
			}
			return null;
		}
		
		public void setEstatus(char estatus){
			this.estatus = estatus;
		}
		
		public char getEstatus(){
			return estatus;
		}
		
		/**
		 * Metodo que permite la busqueda de un recibo en el ArrayList
		 * de acuerdo a la fecha de facturacion
		 * @param fechaFacturacion informacion de la fecha a la que pertenece el recibo buscado
		 * @return informacion del recibo buscado en el ArrayList en caso de encontrarlo 
		 * o null en caso de no encontrarlo
		 */
		@SuppressWarnings("deprecation")
		public Recibo buscarReciboFecha(Date fechaFacturacion) {
			for (int i = 0; i < contarRecibos(); i++) {
				if ((obtenerRecibo(i).getFechaFacturacion().getMonth() == fechaFacturacion.getMonth()) 
				   && (obtenerRecibo(i).getFechaFacturacion().getYear() == fechaFacturacion.getYear())) {
					return obtenerRecibo(i);
				}
			}
			return null;
		}
		
		
		
}
